/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.invoice.model.dao;

import com.invoice.busines.dto.VendedorCampoDTO;
import com.invoice.busines.dto.VendedorDTO;
import com.invoice.exceptions.InvoiceException;
import com.invoice.model.entities.Categoriausuario;
import com.invoice.model.entities.Usuarios;
import com.invoice.model.entities.UsuarioCampo;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.Query;


/**
 *
 * @author Lenin
 */
public class VendedorDAOHibernate extends DAOGenerico implements VendedorDAO{
    Logger logger=Logger.getLogger(VendedorDAOHibernate.class.getName());
   
    @Override
    public Usuarios convertDTOtoPojo(Object object) {
        if(object==null){
            return null;
        }
        VendedorDTO vendedorDTO=(VendedorDTO)object;
        Usuarios usuarios=new Usuarios();
        try {
            Categoriausuario categoriaUsuario=new Categoriausuario();
            usuarios.setIdUsu(vendedorDTO.getIdUsuario());
            usuarios.setApeVen(vendedorDTO.getApellido());
            categoriaUsuario.setIdCat(vendedorDTO.getCategoriaUsuario());
            usuarios.setCategoriausuario(categoriaUsuario);
            usuarios.setCelVen(vendedorDTO.getCelular());
            usuarios.setDirVen(vendedorDTO.getDireccion());
            usuarios.setEmaVen(vendedorDTO.getEmail());
            usuarios.setFecIng(vendedorDTO.getFechaIngreso());
            usuarios.setFecNac(vendedorDTO.getFechaNacimiento());
            
            usuarios.setNomVen(vendedorDTO.getNombre());
            usuarios.setSexVen(vendedorDTO.getSexo());
            usuarios.setSueldo(vendedorDTO.getSueldo());
           
            if(vendedorDTO.getVendedorCampoDTOs() != null){
                UsuarioCampo usuarioCampo;
                for (VendedorCampoDTO vendedorCampoDTO : vendedorDTO.getVendedorCampoDTOs()){
                    usuarioCampo = new UsuarioCampo();
                    usuarioCampo.setIdUsuarioCampo(vendedorCampoDTO.getIdVendedorCampo());
                    usuarioCampo.setNameLabel(vendedorCampoDTO.getNameLabel());
                    usuarioCampo.setValueLabel(vendedorCampoDTO.getValueLabel());
                    
                }
            }
            return usuarios;
        } catch (Exception e) {
            logger.log(Level.SEVERE, "Error", e);
            return null;
        }
        
    }

       @Override
    public VendedorDTO convertPojotoDTO(Object object) {
        if(object==null){
            return null;
        }
        try {
            Usuarios usuarios=(Usuarios)object;
            VendedorDTO vendedorDTO=new VendedorDTO();
            vendedorDTO.setIdUsuario(usuarios.getIdUsu());
           
            vendedorDTO.setApellido(usuarios.getApeVen());
            vendedorDTO.setCategoriaUsuario(usuarios.getCategoriausuario().getIdCat());
            vendedorDTO.setCelular(usuarios.getCelVen());
            vendedorDTO.setDireccion(usuarios.getDirVen());
            vendedorDTO.setDni(usuarios.getDni());
            vendedorDTO.setEmail(usuarios.getEmaVen());
            vendedorDTO.setFechaIngreso(usuarios.getFecIng());
            vendedorDTO.setFechaNacimiento(usuarios.getFecNac());
            vendedorDTO.setNombre(usuarios.getNomVen());
            vendedorDTO.setSexo(usuarios.getSexVen());
            vendedorDTO.setSueldo(usuarios.getSueldo());
            
            return vendedorDTO;
        } catch (Exception e) {
            return null;
        }
        
    }

    @Override
    public VendedorDTO findByDni(String dni) throws InvoiceException {
       try {
            startSession();
            Query query=session.createQuery("from Usuarios where cerVen=:dni").setParameter("dni", dni);
            Usuarios usuarios=(Usuarios)query.uniqueResult();
            VendedorDTO vendedorDTO=convertPojotoDTO(usuarios);
            transaction.commit();
            return vendedorDTO;
        } catch (Exception e) {
            rollback();
            throw new InvoiceException("Error en insercion", e);
        }finally{
            closeSession();
        }
    }
    
    
    
    @Override
    public List<VendedorDTO> findAll() throws InvoiceException {
        List<VendedorDTO> result = new ArrayList<VendedorDTO>();
        try {
            startSession();
            Query query=session.createQuery("from Usuarios");
            List<Usuarios> list = (ArrayList<Usuarios>)query.list();
         
            for (Usuarios usuario : list) {
                VendedorDTO vendedorDTO = convertPojotoDTO(usuario);
                result.add(vendedorDTO);
            }
            transaction.commit();
            return result;
        } catch (Exception e) {
            rollback();
            throw new InvoiceException("Error en busqueda", e);
        }finally{
            closeSession();
        }
    }
}
